// 我也是看了一下老师的思路呢，感觉一下子就通顺了
#include <iostream>
#include <string>
#include <vector>
#include <cstring>
// using namespace std;
// const int N = 1e2 + 10;
// bool vis[N][26];
// bool check(int x, int y){
//     for (int i = 0; i < 26; i++){
//         if (vis[x][i] && vis[y][i]) return true;
//     }
//     return false;
// }
// int main(){
//     int t; cin >> t;
//     while (t--){
// //         每一次开始都要重新清空数据
//         memset(vis, 0, sizeof vis);
//         int n; cin >> n;
//         for (int i = 0; i < n; i++){
//             string s; cin >> s;
//             for (auto& ch : s) {
//                 vis[i][ch - 'a'] = true;
//             }
//         }
        
//         int right = n - 1, left = 0;
//         while (right > left){
//             if (!check(right, left)) break;
//             right --, left ++;
//         }
//         if (right == left) cout << "Yes" << endl;
//         else cout << "No" << endl;
//     }
//     return 0;
// }

using namespace std;
int t, n;
string s;
bool vis[110][26];
bool check(int left, int right)
{
    for(int i = 0; i < 26; i++)
    {
        if(vis[left][i] && vis[right][i]) return true;
    }
    return false;
}
int main()
{
    cin >> t;
    while(t--)
    {
        memset(vis, 0, sizeof vis); // 清空之前的数据         cin >> n;
        for(int i = 0; i < n; i++)
        {
            cin >> s;
            for(auto ch : s)
            {
                vis[i][ch - 'a'] = true;
            }
        }
        
        int left = 0, right = n - 1;
        while(left < right)
        {
            if(!check(left, right)) break;
            left++; right--;
        }
        if(left < right) cout << "No" << endl;
        else cout << "Yes" << endl;
    }
    
    return 0;
}

